#pragma once

/*-----------------------------------------------------------------*\
	
	Renderable define a object for rendering.
	
	Render() is a prefix method for RenderImpl().

	The implement of rendering is RenderImpl().
	If the GetVisible() return a false property, RenderImpl() will be omited.

	GetVisible() and GetSequence() has the default return value.

\*-----------------------------------------------------------------*/

namespace Graphics
{
	class Graphic;

	class Renderable
	{
	public:
		Renderable(void);
		virtual ~Renderable(void) = 0 ;

	protected:
		virtual bool RenderImpl(void) = 0;

	public:
		// Render the object to graphic
		bool Render(void);

		virtual bool GetVisible(void);
		virtual int GetSequence(void);
	};
}